package app.dis.presentacion.beans;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.annotation.PostConstruct;
import javax.ejb.Stateful;
import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.inject.Inject;
import javax.inject.Named;
import javax.faces.component.UIComponent;

import org.jboss.logging.Logger;

import app.dis.accesoadatos.dao.ClienteDAO;
import app.dis.accesoadatos.dao.CuentaDAO;
import app.dis.accesoadatos.dao.RolDAO;
import app.dis.accesoadatos.dao.TipoCuentaDAO;
import app.dis.accesoadatos.entidades.Cliente;
import app.dis.accesoadatos.entidades.Cuenta;
import app.dis.accesoadatos.entidades.Rol;
import app.dis.accesoadatos.entidades.TipoCuenta;
import app.dis.accesoadatos.entidades.Usuario;
import app.dis.resources.Reloj;

@Named
@ConversationScoped
@Stateful
@ManagedBean
@ViewScoped
public class CrearCuentaBean {

	private Cliente cliente;
	private Usuario usuario = new Usuario();
	// private Usuario usuarioAgregar;
	private List<Usuario> usuarios;
	private List<Rol> roles;
	private Cuenta cuenta = new Cuenta();
	private List<TipoCuenta> tipoCuentas;
	private int num = 0;
	private String numCuenta = "";
	private TipoCuenta tipoCuenta;
	Reloj reloj = new Reloj();
	Logger log = Logger.getLogger(this.getClass().getName());
	Reloj r = new Reloj();
	private List<Cuenta> cuentas = new ArrayList<Cuenta>();

	@Inject
	RolDAO rolDAO;
	@Inject
	TipoCuentaDAO tipoCuentaDAO;
	@Inject
	CuentaDAO cuentaDAO;
	
	@Inject
	ClienteDAO clienteDAO;
	
	
	
	@Inject
	Conversation conversation;
	
	String user;
	String pass;
	Rol rolSeleccionado;

	@PostConstruct
	public void init() {
		
		log.info("LLEGO AL POSTCONTRUC");
		usuarios = new ArrayList<Usuario>();

		this.conversation.begin();
		cliente = new Cliente();
		roles = rolDAO.getRol();
		tipoCuentas = tipoCuentaDAO.getTipoCuenta();

		num = cuentaDAO.getNumeroCuenta() + 1;

		numCuenta = String.format("%010d", num);
		

	}

	public void Agregar() {
		
		this.usuario.setNombreusuario(user);
		this.usuario.setPassword(pass);
		this.usuario.setUnRol(rolSeleccionado);
		
		usuarios.add(usuario);
		usuario = new Usuario();
		
		
	}

	public String Guardar() {

	
		this.cliente.setUsuarios(usuarios);
		this.cliente.setCuentas(cuentas);
		
		clienteDAO.insertar(cliente);
		
		
		//for(Cuenta c : cuentas ){
//			c.setUnCliente(this.cliente);
		//	cuentaDAO.insertar(c);	
	//	}
		
		
		this.conversation.end();
		return "IngresarPersona.xhtml?faces-redirect=true";

	}

	public String Cancelar() {
		this.conversation.end();
		return "IngresarPersona.xhtml?faces-redirect=true";
	}

	public void AgregarCuenta() {

		this.cuenta.setNumeroCuenta(numCuenta);
		this.cuenta.setUnTipoCuenta(tipoCuenta);
		this.cuenta.setFecha(r.getFechaActualDate());

		log.info("LLEGO A AGREGAR CUENTAS");
		cuentas.add(cuenta);
		log.info("TAMNAIO " + cuentas.size());
		log.info("Cuentas" + cuentas.get(0).getNumeroCuenta());
		num = Integer.parseInt(numCuenta) + 1;
		numCuenta = String.format("%010d", num);
		cuenta=new Cuenta();

	}

	public Cuenta getCuenta() {
		return cuenta;
	}

	public void setCuenta(Cuenta cuenta) {
		this.cuenta = cuenta;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public String getNumCuenta() {
		return numCuenta;
	}

	public void setNumCuenta(String numCuenta) {
		this.numCuenta = numCuenta;
	}

	public List<TipoCuenta> getTipoCuentas() {
		return tipoCuentas;
	}

	public void setTipoCuentas(List<TipoCuenta> tipoCuentas) {
		this.tipoCuentas = tipoCuentas;
	}

	public TipoCuenta getTipoCuenta() {
		return tipoCuenta;
	}

	public void setTipoCuenta(TipoCuenta tipoCuenta) {
		this.tipoCuenta = tipoCuenta;
	}

	public List<Rol> getRoles() {
		return roles;
	}

	public void setRoles(List<Rol> roles) {
		this.roles = roles;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public List<Usuario> getUsuarios() {
		return usuarios;
	}

	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}

	public List<Cuenta> getCuentas() {
		return cuentas;
	}

	public void setCuentas(List<Cuenta> cuentas) {
		this.cuentas = cuentas;
	}

	public String getUser() {
		return user;
	}

	public void setUser(String user) {
		this.user = user;
	}

	public String getPass() {
		return pass;
	}

	public void setPass(String pass) {
		this.pass = pass;
	}

	public Rol getRolSeleccionado() {
		return rolSeleccionado;
	}

	public void setRolSeleccionado(Rol rolSeleccionado) {
		this.rolSeleccionado = rolSeleccionado;
	}
	
	

}
